package com.cifer.utils;

import com.cifer.exception.DateFileMissException;
import com.cifer.exception.TimeFileMissException;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import static com.cifer.utils.TimeUtils.parse;

public class FileHandler {
//    private static File record = new File("..\\..\\Record");
    private static File record = new File("E:\\softwareInstall\\witM\\Record");

    //获取Record类下最新的时间文件
    public static File getLatestFile(){
        //拿到最新的文件
        File[] files = record.listFiles();
        if(files.length==0){
            throw new DateFileMissException("未找到日期文件数据");
//            return Result.error("未找到日期文件数据");
        }

        //找最新的文件
        File latestFile=files[0];
        for(int i=1;i<files.length;i++){
            //转换成可比较的日期类型
            LocalDate latestDate = LocalDate.parse(latestFile.getName());
            LocalDate date = LocalDate.parse(files[i].getName());
            if(date.isAfter(latestDate)){
                latestFile=files[i];
            }
        }

        File[] timeFiles = latestFile.listFiles();
        if(timeFiles.length==0){
            throw new TimeFileMissException("未找到时间文件数据");
//            return Result.error("未找到时间文件数据");
        }
        latestFile=timeFiles[0];
        for(int i=1;i<timeFiles.length;i++){
            //转换成可比较的时间类型
            LocalTime latestTime = parse(latestFile.getName());
            LocalTime time = parse(timeFiles[i].getName());
            if(time.isAfter(latestTime)){
                latestFile=timeFiles[i];
            }
        }
        return latestFile;
    }
    //获取Record文件下指定文件
    public static File getFile(String date,String time){
        if(record.listFiles().length==0){
            throw new DateFileMissException("未找到日期文件数据");
//            return Result.error("未找到日期文件数据");
        }
        File dateFile = new File(record, date);
        if(dateFile.listFiles().length==0){
            throw new TimeFileMissException("未找到时间文件数据");
        }
        File target = new File(dateFile, time);
        return target;
    }


    //文件拷贝方法
    public  static void fileCopy(File sourceFile,File destinationFile) throws IOException {
        FileInputStream fis = new FileInputStream(sourceFile);
        FileOutputStream fos = new FileOutputStream(destinationFile);
        byte[] buff=new byte[1024];
        int length=0;
        while((length=fis.read(buff))!=-1){
            fos.write(buff,0,length);
        }
        fis.close();
        fos.close();
    }
    //获取Record目录下日期文件名：相应子文件们的map键值对对象
    public static Map<String, List> getDirectoryMap(){
        HashMap<String, List> dirMap = new HashMap<>();
        for (File file : record.listFiles()) {
            //对每一个日期文件，遍历各子文件，并将文件名放入list中
            ArrayList<String> dataList = new ArrayList<>();
            for (File subFile : file.listFiles()) {
                dataList.add(subFile.getName());
            }
            dirMap.put(file.getName(),dataList);
        }
        return dirMap;

    }
    //判断文件路径是否正确
    public static boolean isFilePath(String path) {
        // 正则表达式匹配 Windows 和类 Unix 风格路径及文件名
        String regex = "^([a-zA-Z]:\\\\|/)(?:[\\w\\s!@#$%^&*()-_+=,./?\\u4e00-\\u9fa5]+\\\\|/)*[\\w\\s!@#$%^&*()-_+=,.\\u4e00-\\u9fa5]+\\.?\\w*$";
        return Pattern.matches(regex, path);
    }



}
